<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数</title>
    <!-- 
        创建对象可以通过三种方式：（ES6之前的方法）
        对象字面量
        new   Object()
        自定义构造函数
     -->
</head>
<body>
    
</body>
<script>
    // new Object()
    // var obj = new Object()

    // var obj = {}
    // console.log(obj);

    // 构造函数
    // 构造函数方法虽然很好用，但是存在浪费内存的问题。
    function Star(uname,age) {
        this.uname = uname
        this.age = age
        this.sing = function(song){
            console.log(song);
        }
    }
    var ldh = new Star('ldh')
    ldh.sing('冰雨')
    console.log(ldh);
    console.log(ldh.uname);
    console.log(Star.uname);
    Star.sex = '男'
    console.log(Star.sex);
    console.log(ldh.sex);

</script>
<!-- 
    构造函数
构造函数是一种特殊的函数，主要用来初始化对象，即为对象成员变量赋初始值，
它总与 new一起使用。我 们可以把对象中一些公共的属性和方法抽取出来，然后封装到这个函数里面。

在 JS 中，使用构造函数时要注意以下两点：

构造函数用于创建某一类对象，其首字母要大写
构造函数要和 new 一起使用才有意义
new 在执行时会做四件事情：

① 在内存中创建一个新的空对象。

② 让 this 指向这个新的对象。

③ 执行构造函数里面的代码，给这个新对象添加属性和方法。

④ 返回这个新对象（所以构造函数里面不需要 return ）。
JavaScript 的构造函数中可以添加一些成员，可以在构造函数本身上添加，
也可以在构造函数内部的 this 上添 加。通过这两种方式添加的成员，就分别称为静态成员和实例成员。

静态成员：在构造函数本上添加的成员称为静态成员，只能由构造函数本身来访问。
实例成员：在构造函数内部创建的对象成员称为实例成员，只能由实例化的对象来访问。

 -->
</html>